package fr.dauphine.tourisme.java;

import java.io.BufferedReader;
import java.io.Console;
import java.io.IOException;
import java.io.InputStreamReader;

public class ModeConsole {
	
	//Application utilisee par le service du tourisme...
	//login = mot de passe = 'service' ou 'admin'
	public static boolean service_tourisme = false;
	
	//...ou par un utilisateur touriste
	public static String login = null;
	public static Personne utilisateur;
	
	public static void main (String args[]) {
		
		BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in)); 
		String commande_str = ""; 
		char commande;
		
		int nb_choix = 2;
		for(;;) {
			
			boolean login_OK = false;
			
			do {
				System.out.println("======================================================");
				System.out.println("            >>>>>   MENU PRINCIPAL   <<<<<            ");
				System.out.println();
				System.out.println("Bonjour, bienvenue sur l'application de tourisme");
				System.out.println("1. connexion");
				System.out.println("2. inscription");
				System.out.println("Q. quitter");
				System.out.print("Choix : ");
		
				try {
					commande_str = clavier.readLine().replace(" ", "");;
					commande = Character.toUpperCase(commande_str.charAt(0));
				} catch (IOException e) { commande = 'E'; }
			}
			while(!(commande >= '1' && commande <= Integer.toString(nb_choix).charAt(0)) && commande != 'Q');
		
			switch(commande) {
			
			/////////////////
			// inscription //
			/////////////////
				case '2' :
				{
					System.out.println("======================================================");
					System.out.println("             >>>>>   INSCRIPTION   <<<<<              ");
					System.out.println();
					
					if (inscription_application()) {
						login = ""; //...
						login_OK = true;
						//Pas de break, donc appel case '1' CONNEXION
					}
					else break;
				}
			
			/////////////////
			//  connexion  //
			/////////////////
		
				case '1' : 
				{
					System.out.println("======================================================");
					System.out.println("              >>>>>   CONNEXION   <<<<<               ");
					System.out.println();
				
					boolean login_password_OK = false;
					do {
						//Saisie du login
						boolean saisie_OK = false;
						if(login_OK) {
							System.out.println("Login : " + login);
						}
						else {
							do {
								System.out.print("Login : ");
								try {
									commande_str = clavier.readLine().replace(" ", "");
									login = commande_str;
									saisie_OK = true;
								} catch (IOException e) {}
							}
							while(!saisie_OK);
						}
				
						//Saisie du mot de passe
						saisie_OK = false;
						do {
							System.out.print("Mot de passe : ");
							try {
								commande_str = clavier.readLine().replace(" ", "");
								// System.console().readPassword() cache le mot de passe
								// mais ne fonctionne qu'en vrai console (pas en console Eclipse)
								saisie_OK = true;
							} catch (IOException e) {}
						}
						while(!saisie_OK);
					
						//Controle validite login / mot de passe
						if(login.toLowerCase().equals("admin") || login.toLowerCase().equals("service")) {
							if(commande_str.toLowerCase().equals("admin") || commande_str.toLowerCase().equals("service")) {
								login_password_OK = true;
								service_tourisme = true;
							}
						}
						else if(controle_connexion(login, commande_str)) {
							login_password_OK = true;
						}
						
						//Mot de passe ou login incorrect
						if(!login_password_OK) {
							if(login_OK) System.out.println("Mot de passe incorrect");
							else System.out.println("Login et/ou mot de passe incorrect");
							do {
								System.out.print("Retour au menu principal (O/N) : ");
								try {
									commande_str = clavier.readLine().replace(" ", "");
									commande = Character.toUpperCase(commande_str.charAt(0));
								} catch (IOException e) { commande = 'E'; }
							} while(commande != 'O' && commande != 'N');
							if(commande == 'O') break;
						}
					}while(!login_password_OK);	
					if(commande == 'O') continue;
					break;
				}
			}
			break;
		}
		
		if(commande == 'Q') {
			fin_application();
			return;
		}
		
		/////////////////////////
		// SERVICE DU TOURISME //
        /////////////////////////
		if(service_tourisme) {
			nb_choix = 8;
			for(;;) {
				do {
					System.out.println("======================================================");
					System.out.println("            >>>>>   MENU PRINCIPAL   <<<<<            ");
					System.out.println();
					System.out.println("Bonjour, bienvenue sur l'application de tourisme");
					System.out.println("1. ajouter une activite");
					System.out.println("2. supprimer une activite");
					System.out.println("3. modifier une activite");
					System.out.println("4. consulter une activite");
					System.out.println("5. rechercher des activites");
					System.out.println("6. liste des activites");
					System.out.println("7. rechercher un utilisateur");
					System.out.println("8. liste des utilisateurs");
					System.out.println("Q. quitter");
					System.out.print("Choix : ");
			
					try {
						commande_str = clavier.readLine().replace(" ", "");;
						commande = Character.toUpperCase(commande_str.charAt(0));
					} catch (IOException e) { commande = 'E'; }
				}
				while(!(commande >= '1' && commande <= Integer.toString(nb_choix).charAt(0)) && commande != 'Q');
			
				switch(commande) {
					case '1' : {
						ajouter_activite();
						break;
					}
					case '2' : {
						supprimer_activite();
						break;
					}
					case '3' : {
						modifier_activite();
						break;
					}
					case '4' : {
						consulter_activite();
						break;
					}
					case '5' : {
						rechercher_activites();
						break;
					}
					case '6' : {
						liste_activites();
						break;
					}
					case '7' : {
						rechercher_utilisateurs();
						break;
					}
					case '8' : {
						liste_utilisateurs();
						break;
					}
				}
				
				if(commande == 'Q') break;
			}
		}
		
		//////////////////////////
		// UTILISATEUR TOURISTE //
        //////////////////////////
		else {
			nb_choix = 8;
			for(;;) {
				do {
					System.out.println("======================================================");
					System.out.println("            >>>>>   MENU PRINCIPAL   <<<<<            ");
					System.out.println();
					System.out.println("Bonjour" + utilisateur.getPrenom() + ", bienvenue sur l'application de tourisme");
					System.out.println("1. consulter mes activites prevues");
					System.out.println("2. consulter mes activites actuelles");
					System.out.println("3. consulter mes activites passees");
					System.out.println("4. s'inscrire a une activite");
					System.out.println("5. se desinscrire d'une activite");
					System.out.println("6. rechercher des activites");
					System.out.println("7. s'informer sur une activite");
					System.out.println("8. liste des activites");
					System.out.println("Q. quitter");
					System.out.print("Choix : ");
			
					try {
						commande_str = clavier.readLine().replace(" ", "");;
						commande = Character.toUpperCase(commande_str.charAt(0));
					} catch (IOException e) { commande = 'E'; }
				}
				while(!(commande >= '1' && commande <= Integer.toString(nb_choix).charAt(0)) && commande != 'Q');
			
				switch(commande) {
					case '1' : {
						activites_prevues();
						break;
					}
					case '2' : {
						activites_actuelles();
						break;
					}
					case '3' : {
						activites_passees();
						break;
					}
					case '4' : {
						inscription_activite();
						break;
					}
					case '5' : {
						desinscription_activite();
						break;
					}
					case '6' : {
						rechercher_activites();
						break;
					}
					case '7' : {
						consulter_activite();
						break;
					}
					case '8' : {
						liste_activites();
						break;
					}
				}
				
				if(commande == 'Q') break;
			}
		}

		fin_application();
	}



	////////////////////////
	// ACTION UTILISATEUR //
	////////////////////////
	
	private static void rechercher_activites() {
		// TODO Auto-generated method stub
		
	}

	private static void desinscription_activite() {
		// TODO Auto-generated method stub
		
	}

	private static void inscription_activite() {
		// TODO Auto-generated method stub
		
	}

	private static void activites_passees() {
		// TODO Auto-generated method stub
		
	}

	private static void activites_actuelles() {
		// TODO Auto-generated method stub
		
	}

	private static void activites_prevues() {
		// TODO Auto-generated method stub
		
	}
	
	
	////////////////////////////
	// CONSULTATION ACTIVITES //
	////////////////////////////
	
	private static void liste_activites() {
		// TODO Auto-generated method stub
		
	}

	private static void consulter_activite() {
		// TODO Auto-generated method stub
		
	}

	
	///////////////////////////
	// GESTION DES ACTIVITES //
	///////////////////////////
	
	private static void modifier_activite() {
		// TODO Auto-generated method stub
		
	}

	private static void supprimer_activite() {
		// TODO Auto-generated method stub
		
	}

	private static void ajouter_activite() {
		// TODO Auto-generated method stub
		
	}
	
	
	///////////////////////////////
	// CONSULTATION UTILISATEURS //
	///////////////////////////////
	
	private static void liste_utilisateurs() {
		// TODO Auto-generated method stub
		
	}

	private static void rechercher_utilisateurs() {
		// TODO Auto-generated method stub
		
	}
	
	
	////////////////////////////////
	// FONCTIONS DE L'APPLICATION //
	////////////////////////////////
	
	private static boolean inscription_application() {
		// TODO Auto-generated method stub
		return false;
	}

	private static boolean controle_connexion(String login, String password) {
		// On parse le fichier utilisateur pour tester l'existence de (login, password)
		
		// Si existence, on recupere les donnees du l'utilisateur dans l'objet Personne this.utilisateur
		return false;
	}
	
	private static void fin_application() {
		//Fin de l'application
		System.out.println("======================================================");
		System.out.println("Merci d'avoir utilise l'application de tourisme, a bientot et bon sejour !");
	}
}


